package com.excesys.exsecs.energy.controller;

import com.excesys.exsecs.common.core.util.R;
import com.excesys.exsecs.common.security.annotation.Inner;
import com.excesys.exsecs.energy.service.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author zhangtailong
 * @title: EcAnalyzeController
 * @projectName pigx
 * @description: 能耗排名
 * @date 2024/04/09 10:25
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/ranking")
@Tag(name = "能耗排名")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class EcRankingController {

    //能耗设备注册表
    private final RegDevService regDevService;

    //部门表
    private final DimDeptService dimDeptService;

    //支路表
    private final DimBranchService dimBranchService;

    //分项表
    private final DimSubitemService dimSubitemService;

    //重点设备表
    private final DimKeqService dimKeqService;

    //区域表
    private final DimAreaService dimAreaService;

    //小时流水表 - 电
    private final PowerHourFlowService powerHourFlowService;

    //小时流水表 - 水
    private final WaterHourFlowService waterHourFlowService;


    /*
     * 区域能耗排名
     * @param ids 区域id
     * @param startDate 查询开始时间 yyyy、yyyy-MM、yyyy-MM-dd
     * @param endDate  查询结束时间 yyyy、yyyy-MM、yyyy-MM-dd
     * @param energyType 能耗类型 1电表 2水表 3气。。。
     * @param order 排名类型 asc，desc
     * */
    @Operation(summary = "区域能耗排名", description = "区域能耗排名")
    @GetMapping("/areaSort")
    public R areaSort(String ids, String startDate, String endDate, String order, String energyType) {
        List<Map<String, Object>> result = new ArrayList<>();
        if (energyType.equals("1")) {
            result = dimAreaService.areaSort(ids,startDate, endDate, order,energyType);
        } else if (energyType.equals("2")) {
            result = dimAreaService.areaSortWaterRank(ids,startDate, endDate, order,energyType);
        }
        return R.ok(result, "区域能耗排名");
    }

    /*
     * 部门能耗排名
     * @param startDate 查询开始时间 yyyy、yyyy-MM、yyyy-MM-dd
     * @param  endDate  查询结束时间 yyyy、yyyy-MM、yyyy-MM-dd
     * @param energyType 能耗类型 1电表 2水表 3气。。。
     * */
    @Operation(summary = "部门能耗排名", description = "部门能耗排名")
    @GetMapping("/deptSort")
    @Inner(value = false)
    public R deptSort(String ids, String startDate, String endDate, String order, String energyType) {
        List<Map<String, Object>> list = new ArrayList<>();
        if (energyType.equals("1")) {
            list = dimDeptService.deptSort(ids,startDate, endDate, order,energyType);
        } else if (energyType.equals("2")) {
            list = dimDeptService.deptSortWaterRank(ids,startDate, endDate, order,energyType);
        }
        return R.ok(list, "部门能耗排名");
    }

    /*
     * 支路能耗排名
     * @param startDate 查询开始时间 yyyy、yyyy-MM、yyyy-MM-dd
     * @param  endDate  查询结束时间 yyyy、yyyy-MM、yyyy-MM-dd
     * @param energyType 能耗类型 1电表 2水表 3气。。。
     * */
    @Operation(summary = "支路能耗排名", description = "支路能耗排名")
    @GetMapping("/branchSort")
    public R branchSort(String ids, String startDate, String endDate, String order) {
        return R.ok(dimBranchService.branchSort(ids,startDate, endDate, order), "支路能耗排名");
    }

    /*
     * 分项能耗排名
     * @param startDate 查询开始时间 yyyy、yyyy-MM、yyyy-MM-dd
     * @param  endDate  查询结束时间 yyyy、yyyy-MM、yyyy-MM-dd
     * @param energyType 能耗类型 1电表 2水表 3气。。。
     * */
    @Operation(summary = "分项能耗排名", description = "分项能耗排名")
    @GetMapping("/subitemSort")
    public R subitemSort(String ids, String startDate, String endDate, String order) {
        return R.ok(dimSubitemService.subitemSort(ids,startDate, endDate, order), "分项能耗排名");
    }

    /*
     * 重点设备能耗排名
     * @param startDate 查询开始时间 yyyy、yyyy-MM、yyyy-MM-dd
     * @param  endDate  查询结束时间 yyyy、yyyy-MM、yyyy-MM-dd
     * @param energyType 能耗类型 1电表 2水表 3气。。。
     * */
    @Operation(summary = "重点设备能耗排名", description = "重点设备能耗排名")
    @GetMapping("/devSort")
    public R devSort(String ids, String startDate, String endDate, String order) {
        return R.ok(dimKeqService.devSort(ids,startDate, endDate, order), "重点设备能耗排名");
    }

}
